const joi = require("joi")

/**
 * string() 必须是字符串
 * alphanum() 值只能是包含a-zA-Z0-9的字符串
 * min(length) 最小长度
 * max(length) 最大长度
 * required() 值是必填项，不能为undefined
 * pattern() 值必须符合正则表达是的规则
 */

// 定义用户名和密码的验证规则
const username = joi.string().alphanum().min(3).max(20).required()

const password = joi.string().pattern(/^[\S]{6,12}$/)

module.exports.reg_login_schema = {
    body: {
        username,
        password,
    }
}

// 定义密码的校验规则
module.exports.update_pwd_schema = {
    body: {
        oldPwd: password,
        // 使用 joi.not(joi.ref('oldPwd')).concat(password) 规则，验证 req.body.newPwd 的值
        // 解读：
        // 1. joi.ref('oldPwd') 表示 newPwd 的值必须和 oldPwd 的值保持一致
        // 2. joi.not(joi.ref('oldPwd')) 表示 newPwd 的值不能等于 oldPwd 的值
        // 3. .concat() 用于合并 joi.not(joi.ref('oldPwd')) 和 password 这两条验证规则
        newPwd: joi.not(joi.ref('oldPwd')).concat(password),
    }
}

// 定义id, nickname, email的验证规则

const id = joi.number().integer().min(1).required()

const nickname = joi.string().required()

const email = joi.string().email().required()

module.exports.update_userinfo_schema = {
    body: {
        id,
        nickname,
        email,
    }
}

// 定义 user_pic的验证规则
// dataUri() 指的是如下格式的字符串数据：
// 
const avatar = joi.string().dataUri().required()

module.exports.update_avatar_schema = {
    body: {
        avatar: avatar,
    }
}

